package com.azure.code.array.mergeSort;

import java.util.Arrays;

public class MergeSortedArray_88 {
    public void merge_1(int[] nums1,int m,int[] nums2,int n){
        for (int i = 0; i < n; i++) {
            nums1[m+1]=nums2[i];
        }
        Arrays.sort(nums1);
    }
    public void merge(int[] nums1,int m,int[] nums2,int n){
        int[] nums = new int[n+m];
        int cur = 0,p1 = 0,p2=0;
        while (p1<m&&p2<n){
            if(nums1[p1]>nums2[p2]){
                nums[cur++]=nums2[p2++];
            }else {
                nums[cur++]=nums1[p1++];
            }
        }
        while (p1<m){
            nums[cur++] = nums1[p1++];
        }
        while (p2<n){
            nums[cur++] = nums2[p2++];
        }
        for (int i =0;i<n+m;i++)
            nums1[i] = nums[i];
    }
    // 原地排序 从尾部开始
    public static void merge_2(int[] nums1,int m,int[] nums2,int n){
        // m 10  n 5
        // p1 5  p2 4
        int p1 = m-1,p2 = n-1;
        int tail = m+n-1;
        while (p1>=0&&p2>=0){
            if(nums1[p1]>nums2[p2]){
                nums1[tail--] = nums1[p1--];
            }else {
                nums1[tail--] = nums2[p2--];
            }
        }
        while (p1>=0){
            nums1[tail--] = nums1[p1--];
        }
        while (p2>=0){
            nums1[tail--] = nums2[p2--];
        }
    }

    public static void main(String[] args) {
        int[] nums1 = {0};
        int[] nums2 = {1};
        merge_2(nums1,0,nums2,1);
        System.out.println(Arrays.toString(nums1));
    }
}
